﻿//using UnityEngine;
//using System.Collections;
//using System.Collections.Generic;
//using System.IO;
//using UnityEditor;
//using System;


//public class HandleLuaTool : EditorWindow {

//    static Dictionary<string,string> lua2TranslateList=new Dictionary<string,string>();
//    static Dictionary<string,string> lua2OriginList=new Dictionary<string,string>();
//    static List<string> filterFolderList = new List<string>();//过滤不需要翻译的文件夹
//    static Dictionary<string,List<string>> tbAndFieldName=new Dictionary<string, List<string>>();

//    /// <summary>
//    /// table key/item key/item value
//    /// </summary>
//    static Dictionary<string,Dictionary<string,string>> lua2TranslateContentList=new Dictionary<string, Dictionary<string, string>>();
//    static Dictionary<string,Dictionary<string,string>> lua2OriginContentList=new Dictionary<string, Dictionary<string, string>>();
//    static bool isAllBuild = true;
//    static bool haveNewFileIn=true;

//    static string url_path=Application.dataPath+ "/GameResources/Lua/app/config";
//    static string url_lua_tb_name = Application.dataPath + "/GameResources/Lua/app/config/lua_tb_field.lua";
//    //static string url_search = Application.dataPath;//+"/test";
//    static string translate_type="ch";
//    static string filename="";

//    [UnityEditor.MenuItem("Tools/配置文件翻译")]
//    public static void ShowSearchWindow(){
//        EditorWindow.GetWindow (typeof(HandleLuaTool),true,"翻译配置文件",true);	
//    }

//    void OnGUI(){

//        GUILayout.Label ("翻译文件路径/存储文件路径", EditorStyles.boldLabel);
//        url_path = EditorGUILayout.TextField ("默认路径", url_path);
//        GUILayout.Label ("lua表翻译字段名数据文件", EditorStyles.boldLabel);
//        url_lua_tb_name = EditorGUILayout.TextField ("默认路径", url_lua_tb_name);

////		GUILayout.Label ("搜索路径", EditorStyles.boldLabel);
////		url_search = EditorGUILayout.TextField ("默认路径", url_search);

//        GUILayout.Label ("翻译类型(如ch,en...)", EditorStyles.boldLabel);
//        translate_type = EditorGUILayout.TextField ("默认翻译类型", translate_type);
//        if (GUILayout.Button ("开始翻译")) {
//            string rootFolderPath = url_path;
//            string translateType = translate_type.ToLower();
//            if (isAllBuild) {
//                lua2TranslateList.Clear();
//                lua2OriginList.Clear ();			
//            }
//            HandleLuaFile(rootFolderPath);
//            ReplaceLuaFile(translateType);
//        }

//    }



//    /// <summary>
//    /// 根据文件名记录原lua文件和translate文件的完整路径
//    /// </summary>
//    /// <param name="rootFolderPath">Root folder path.</param>
//    static void HandleLuaFile(string rootFolderPath){
//        string traverseFolderPath = rootFolderPath;//lua配置文件所在文件夹
//        DirectoryInfo folder=new DirectoryInfo(traverseFolderPath);

//        DirectoryInfo[] directorinfos = folder.GetDirectories ();
//        FileInfo[] fileinfos = folder.GetFiles ();

//        //改动了文件则重新生成
//        if (haveNewFileIn) {
//            if (directorinfos.Length > 0) {
//                //目录遍历
//                foreach (DirectoryInfo dir in directorinfos) {
//                    if (dir.Extension == ".meta")
//                        continue;
//                    //过滤文件夹
//                    if(filterFolderList.Count>0){
//                        bool isFilter = false;
//                        for (int i = 0; i < filterFolderList.Count; i++) {
//                            if (dir.Name == filterFolderList [i]) {
//                                isFilter = true;
//                                break;
//                            }
//                        }
//                        if (isFilter) {
//                            continue;
//                        }
//                    }

//                    HandleLuaFile(traverseFolderPath + "/" + dir.Name);

//                }
//            }
//            //记录下所有的lua原文件以及translate文件
//            if (fileinfos.Length > 0) {
//                foreach (FileInfo dir in fileinfos) {
//                    if (dir.Extension != ".lua") {
//                        continue;
//                    }
//                    if (!dir.Name.Contains ("translate")) {
//                        filename = dir.Name.Remove (dir.Name.Length - 4);
//                        if (!lua2TranslateList.ContainsKey(filename)&&!lua2OriginList.ContainsKey(filename)) {

//                            string transPath = dir.FullName;
//                            transPath= transPath.Replace (filename, filename + "_translate");

//                            lua2TranslateList.Add(filename, transPath);
//                            lua2OriginList.Add(filename,dir.FullName);
//                        }
//                    }
//                }

//            }
//        }
//    }

//    /// <summary>
//    /// 
//    /// </summary>
//    /// <param name="translateType">Translate type.</param>
//    static void ReplaceLuaFile(string translateType){
//        //根据type从翻译表中找到对应的翻译内容替换掉原表中的内容，然后将新改变后的table写入生成新的对应的lua原表文件
//        string toDoString_translate = "";
//        //string toDoString_origin = "";
//        LuaState lua = new LuaState();

//        foreach (string key in lua2TranslateList.Keys) {
		
//            if(!File.Exists(lua2TranslateList[key])){
//                continue;
//            }

//            //加载translate文件内容
//            byte[] bytes= File.ReadAllBytes(lua2TranslateList[key]);
//            string str = System.Text.Encoding.UTF8.GetString(bytes);
//            StringReader sreader= new StringReader(str);
//            string toReadStr = sreader.ReadLine ();
//            string preStr = "";
//            while (toReadStr != null) {
//                preStr = toReadStr;

//                if ((toReadStr = sreader.ReadLine ()) == null) {
//                    //此时的prestr是return...
//                    break;
//                } else {
//                    toDoString_translate += preStr;
//                }
//            }

//            //加载origin文件内容
//            //			bytes=File.ReadAllBytes(lua2OriginList[key]);
//            //			str = System.Text.Encoding.UTF8.GetString (bytes);
//            //			sreader = new StringReader (str);
//            //			toReadStr = sreader.ReadLine ();
//            //			preStr = "";
//            //			while (toReadStr != null) {
//            //				preStr = toReadStr;
//            //
//            //				if ((toReadStr = sreader.ReadLine ()) == null) {
//            //					//此时的prestr是return...
//            //					break;
//            //				} else {
//            //					toDoString_origin += preStr;
//            //				}
//            //			}

//            lua.DoString (@""+string.Format("{0}",toDoString_translate));//lua_ttable
//            lua.LuaGetGlobal(key+"_translate");//tb_table_build_translate lua_ttable

//            //遍历luatable前清空dic内容
//            lua2TranslateContentList.Clear();
//            lua2OriginContentList.Clear ();

//            //加载对应translatetype的翻译内容
//            HandleTranslateTable(lua,-1,translateType);

//            //			Debug.Log(lua2TranslateContentList.Keys.Count);

//            //			List<string> keylist = new List<string> ();
//            //			foreach (string kesy in lua2TranslateContentList.Keys) {
//            ////				foreach (string kesy2 in lua2TranslateContentList[kesy].Keys) {
//            ////					Debug.Log (kesy2);
//            ////				}
//            //				keylist.Add (kesy);
//            //			}
//            //			keylist.Sort ();

//            lua.LuaPop(lua.LuaGetTop());
//            tbAndFieldName.Clear();
//            //替换翻译内容
//            ApplyTranslate(key,translateType);

////			lua.DoString (@""+string.Format("{0}",toDoString_origin));
////			LuaDLL.lua_getglobal (L, key);

//            StackDump (lua);
//        }
//        //将文件名以及翻译字段写入lua文件
//        //		LuaState lua = new LuaState ();
//        //		System.IntPtr L= lua.L;
//        //		lua.DoFile ("lua_tb_field.lua");
//        //		LuaDLL.lua_getglobal (L, "lua_tb_field");
//        try{
//            if (File.Exists (url_lua_tb_name))
//                File.Delete(url_lua_tb_name);
			
//            FileStream fs = new FileStream (url_lua_tb_name, FileMode.Create);
//            StreamWriter sw = new StreamWriter (fs);
//            string preSpace = "\t";
//            sw.WriteLine ("lua_tb_field={");
//            foreach (KeyValuePair<string,List<string>> keyValue in tbAndFieldName) {
//                sw.WriteLine (preSpace+keyValue.Key+"={");
//                List<string> valu = keyValue.Value;
//                int count=valu.Count;
//                for (int i = 0; i < valu.Count; i++) {
//                    sw.WriteLine (preSpace+string.Format ("[{0}]=\"{1}\",", (i+1).ToString(),valu[i].Trim()));
//                    EditorUtility.DisplayProgressBar ("写入数据中", i.ToString()+"/"+count.ToString(), (i + 1) / count);
//                }
//                sw.WriteLine (preSpace+"},");
//            }
//            sw.WriteLine ("}");
//            sw.WriteLine ("return lua_tb_field;");
//            EditorUtility.ClearProgressBar ();
//            sw.Flush ();
//            sw.Close ();
//            fs.Close ();
//        }catch(Exception e){
//            Debug.Log (e.Message);
//        }

//        lua.Dispose ();
//    }


//    /// <summary>
//    /// 翻译内容覆盖原内容
//    /// </summary>
//    /// <param name="originListKey">Origin list key.</param>
//    /// <param name="translateType">Translate type.</param>
//    /// <param name="keylist">Keylist.</param>
//    static void ApplyTranslate(string originListKey,string translateType ,List<string> keylist=null){
//        //按行读取源文件内容的同时，比对translate的dic的key，进行内容的替换，
//        string url_path=lua2OriginList[originListKey];

//        string toBeWriteStr = "";

////		string tbAndFieldName =originListKey+" ";
//        if (!tbAndFieldName.ContainsKey (originListKey)) {
//            tbAndFieldName.Add (originListKey, new List<string> ());
//        }

//        byte[] bytes= File.ReadAllBytes(url_path);
//        string str = System.Text.Encoding.UTF8.GetString(bytes);
//        StringReader sreader= new StringReader(str);
//        string toReadStr = sreader.ReadLine ();
//        string curTableId = "";
//        Dictionary<string,string> curUsedTranslate=null;
//        while (toReadStr != null) {
//            //id
//            if (toReadStr.Contains ("[") || toReadStr.Contains ("]")) {
//                int length = toReadStr.IndexOf ("]") - toReadStr.IndexOf ("[")-1;
//                //获取到当前子table的id
//                curTableId = toReadStr.Substring (toReadStr.IndexOf ("[")+1,length);
////				Debug.Log (curTableId + "  curitd ");
//                curUsedTranslate = lua2TranslateContentList [curTableId];
//            }
//            //遍历table
//            if (toReadStr.Contains ("=")) {
//                string[] spl=toReadStr.Split('=');
////				Debug.Log (spl[0] + "  cxxxxx "+ spl[1]);
//                string key=spl[0]+"_"+translateType;
//                key = key.Trim ();
//                if (curUsedTranslate!=null&& curUsedTranslate.ContainsKey (key)) {
//                    toReadStr = toReadStr.Substring (0, toReadStr.IndexOf ("=")+1) +"\""+ curUsedTranslate [key]+"\"";
//                    //需要翻译的字段名
////					tbAndFieldName +=spl[0] + " ";
//                    if(!tbAndFieldName[originListKey].Contains(spl[0])){
//                        tbAndFieldName [originListKey].Add (spl [0]);
//                    }
//                } 
//            }
////			if (toReadStr.Contains ("return"))
////				Debug.Log (toReadStr+" return");
//            toBeWriteStr += toReadStr + "\n";
//            toReadStr = sreader.ReadLine ();
//        }
			
//        FileStream fs = new FileStream (url_path, FileMode.Create);
//        StreamWriter sw = new StreamWriter (fs);
//        sw.Write (toBeWriteStr);
//        sw.Flush ();
//        sw.Close ();
//        fs.Close ();
//    }


//    /// <summary>
//    /// 加载对应translatetype的翻译内容
//    /// </summary>
//    /// <param name="L">L.</param>
//    /// <param name="index">Index.</param>
//    /// <param name="translateType">Translate type.</param>
//    /// <param name="tablekey">Tablekey.</param>
//    static void HandleTranslateTable(LuaState lua, int index,string translateType=null, string tablekey=null ){
//        lua.LuaPushNil();
//        index = index - 1;
//        while (lua.LuaNext(index)) {
//            LuaTypes value_type = lua.LuaType(-1);
//            if (value_type != LuaTypes.LUA_TNONE) {
//                if (value_type == LuaTypes.LUA_TTABLE) {
//                    //此时栈顶元素为table
//                    if (tablekey == null) {
//                        //往栈顶push tablekey
//                        lua.LuaPushValue(-2);
//                        string temkey =lua.LuaToString(-1);
//                        lua.LuaPop(1);
//                        //Debug.Log (temkey + " temkey");
//                        if (!lua2TranslateContentList.ContainsKey (temkey)) {
//                            lua2TranslateContentList.Add (temkey, new Dictionary<string,string> ());
//                        }
//                        HandleTranslateTable (lua, -1,translateType,temkey);
//                    } else {
//                        if(!lua2TranslateContentList.ContainsKey(tablekey)){
//                            lua2TranslateContentList.Add(tablekey,new Dictionary<string,string>());
//                        }
//                        HandleTranslateTable (lua, -1,translateType,tablekey);
//                    }
//                } else {//value是字符串
//                    lua.LuaPushValue(-2);
//                    string key = lua.LuaToString(-1);
//                    string value = lua.LuaToString(-2);
//                    //					Debug.Log (key + " ddd d" + value);

//                    if (key.Contains (translateType)) {
//                        lua2TranslateContentList[tablekey].Add(key,value);
//                    }
//                    lua.LuaPop(2);
//                }
//            } else {
//                Debug.Log ("luatable value 为空");
//                break;
//            }
//        }
//        //遍历完后将table也出栈
//        lua.LuaPop(1);
//    }


//    /// <summary>
//    /// 遍历lua栈
//    /// </summary>
//    /// <param name="L">L.</param>
//    static void StackDump(LuaState lua)
//    {

//        int top = lua.LuaGetTop();
//        for (int i = 1; i <= top; i++) {
//            Debug.Log (" type"+ lua.LuaType(i));
//            //			LuaTypes.LUA_TBOOLEAN
//            Debug.Log (lua.LuaToString(i)+" "+ lua.LuaTypeName(lua.LuaType(i)));
//        }
//    }




//    void TestTolua(){
//        //string replacePath = UnityEngine.Application.streamingAssetsPath + "/Local/Lua/app/config/tb_table_build_translate.lua";
//        LuaState lua = new LuaState();
//        //System.IntPtr L= lua.L;

//        lua.DoString(@"
//		tb_table_build_translate = {
//		  [10101]={
//		    id=10101,
//		    name=""风暴要塞"",
//		    name_en=""xxx"",
//		    des=""查看领主信息和学习领主天赋"",
//		    des_en=""bbbbbbbbbbbbbbbbbbbbbbbb"",
//		    details="""",
//		    details_en="""",
//		    uplevel_description=""解锁：{4}"",
//		    uplevel_description_en=""bbbbbbbbbbbbb"",
//		  },
//		  [10201]={
//		    id=10201,
//		    name=""民居"",
//		    name_en=""xxx"",
//		    des=""住宅能提供人口，这样就能建造更多的功能建筑了。"",
//		    des_en=""bbbbbbbbbbbbbbbbbbbbbbbb"",
//		    details=""容量表示您资源建筑可存储资源的上限，当资源建筑生产的资源达到容量时，您的资源建筑将不再生产资源，除非您收取了相应资源！增加新的民居可以提升人口上限，升级可提升金币产量和容量。"",
//		    details_en=""aaaaaaaaaaa"",
//		    uplevel_description=""金币产量：{1}\n金币容量:{2}"",
//		    uplevel_description_en=""bbbbbbbbbbbbb"",
//		  },
//		  }
//
//		");

//        //LuaDLL.lua_getglobal (L, "tb_table_build_translate");


//        //LuaDLL.lua_pushnumber(L, 10101);
//        //LuaDLL.lua_gettable(L, -2);
//        //LuaDLL.lua_pushstring(L, "name");
//        //LuaDLL.lua_gettable(L, -2);
//        //Debug.Log(LuaDLL.lua_tostring(L, -1));

////		LuaDLL.lua_getglobal (L, "tb_table_worker_uplevel");
////		LuaDLL.lua_pushnumber(L, 1);
////		LuaDLL.lua_gettable(L, -2);
////		LuaDLL.lua_pushstring(L, "worker_type");
////		LuaDLL.lua_gettable(L, -2);
////		Debug.Log(LuaDLL.lua_tostring(L, -1));

//        lua.Dispose();
//    }


//}
